/**
 * Servlet Login: destinado a la gestion de todo lo relacionado con el proceso
 * de autenticacion de usuarios (medicos y pacientes)
 */

package infb.servlet.movil;

// Importaciones externas
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.ejb.*;

// Importaciones internas
import infb.modelo.*;
import infb.dao.*;


public class RecepcionDolencias extends HttpServlet {

    // Inyeccion de codigo del contenedor EJB
    @EJB PacientesInterfaz pacienteDAO;
    @EJB DolenciasInterfaz dolenciaDAO;

/**
     * Procesa la peticion del cliente (dispositivo movil) para atender peticiones de login/logout
     * @param peticion El objeto que encapsula la peticion del cliente
     * @param response El objeto que encapsula la respuesta del servidor a la peticion en cuestion
     * @throws ServletException Si ocurre un error especifico de servlet
     * @throws IOException Si ocurre un error de entrada/salida
     */
    protected void procesarPeticion(HttpServletRequest peticion,HttpServletResponse respuesta)
    throws ServletException,IOException {
        // Inicializacion de los flujos
        DataInputStream entradaDesdeCliente=new DataInputStream(peticion.getInputStream());
        // Estructuras de datos auxiliares
        byte[] foto = null;
        int  tam;
        // Leemos el tamaño de la foto enviada
        tam=entradaDesdeCliente.readInt();
        foto=new byte[tam];
        // Leemos la foto en si (la funcion utilizada es clave)
        entradaDesdeCliente.readFully(foto);
        // Leemos el texto incorporado a la imagen
        String texto=entradaDesdeCliente.readUTF();
        // Abrimos la sesion y recuperamos al paciente
        // Falta pasar jsessionid
        HttpSession sesion=peticion.getSession();
        //Long idPaciente=Long.parseLong((String)sesion.getAttribute("identificacion"));
        //Pacientes p=pacienteDAO.find(idPaciente);
        Pacientes p=pacienteDAO.find(new Long(122));
        // Creamos la dolencia y la registramos en la base de datos
        Dolencias dolencia=new Dolencias();
        dolencia.setImagen(foto);
        dolencia.setPaciente(p);
        dolencia.setFecha(new Date());
        dolencia.setAtendida((short)0);
        dolencia.setTexto(texto);
        dolencia.setMedico(p.getMedico());
        dolenciaDAO.create(dolencia);
        // Cerramos el flujo de entrada utilizado
        entradaDesdeCliente.close();
    } 

     /**
     * Procesamiento de peticiones cliente GET
     * @param peticion El objeto que encapsula la peticion del cliente
     * @param response El objeto que encapsula la respuesta del servidor a la peticion en cuestion
     * @throws ServletException Si ocurre un error especifico de servlet
     * @throws IOException Si ocurre un error de entrada/salida
     */
    @Override
    protected void doGet(HttpServletRequest peticion,HttpServletResponse respuesta)
    throws ServletException,IOException {
        procesarPeticion(peticion,respuesta);
    }

    /**
     * Procesamiento de peticiones cliente POST
     * @param peticion El objeto que encapsula la peticion del cliente
     * @param response El objeto que encapsula la respuesta del servidor a la peticion en cuestion
     * @throws ServletException Si ocurre un error especifico de servlet
     * @throws IOException Si ocurre un error de entrada/salida
     */
    @Override
    protected void doPost(HttpServletRequest peticion,HttpServletResponse respuesta)
    throws ServletException,IOException {
        procesarPeticion(peticion,respuesta);
    }

    /**
     * Devuelve una descripcion de la funcionalidad del servlet
     * @return un String con la descripcion del servlet
     */
    @Override
    public String getServletInfo() {
        return "Servlet destinado al procesamiento del envio de dolencias (con sus imagenes asociadas)";
    }

}
